<?php
namespace app\demo\controller;
use think\facade\Db;
use app\job\Test;
use think\facade\Queue;
class Task
{
    /**
     * think-queue 用法说明, 基于redis的消息队列
     * 不加 --queue 则只能执行 $queue=null 的任务
     * 加了 --queue=xxx 则只能执行 $queue=xxx 的任务
     * 示例 php think queue:work --queue=delay
     *
     * Queue::push 及时任务
     * Queue::later 延时任务
     * php queue:listen 消费任务
     * 总结:
     * 调试用 queue:listen 每次执行任务重新加载job代码, 修改代码及时生效但是效率不如下面
     * 线上用 queue:work 常驻内存, 执行效率快
     * */
    public function taskPush()
    {
        $list = Db::table("bank")->where("id >= 10 AND id <= 14")->select()->toArray();
        $queue_name = "q1";
        foreach ($list as $row) {
            Queue::push(Test::class, $row, $queue_name);
        }
        pp($list);
    }

    // 延时任务
    public function taskDelay() {
        $data = 'Time ' . date('Y-m-d H:i:s');
        $data = [
            'name' => '延时任务10秒',
            'desc' => '安得广厦千万间' . microtime(true)
        ];
        $queue_name = "delay";
        $res = Queue::later(1,Test::class,  $data,$queue_name);
        pp('任务创建成功!');
    }

}
